import requests
import time
import json
from core.coze_bot import CozeBot as CB

"""
文章生成模型，传入coze_bot对象、doc保存对象、文章标题、模型类型等信息，既可以保存一个docx文档。

"""


class ArticleModel:

	def __init__(self, title, model_type="english_article"):
		# 初始化 CozeBot 类coze_bot,docx_converter,title,model_type=1
		# self.CB = coze_bot
		# self.DC = docx_converter
		self.title = title
		self.model_type = model_type  # english_article；

	# 生成一篇文章
	def gc_one_article(self):
		analysis = self.ask_bot(content=self.title_analysis_prompt(title))
		if analysis:
			analysis_res = json.loads(analysis)
		else:
			return False
		article_prompt = self.article_gc_prompt(analysis_res['optimize_title'], analysis_res['requirements'])
		article_content = self.ask_bot(article_prompt)
		if not article_content:
			return False
		article_xml = self.ask_bot(self.article_xml_prompt(article_content))
		if not article_xml:
			return False
		return article_xml

	# 大纲prompt
	def title_analysis_prompt(self):
		system_content = """
# 角色
你是一位卓越的中小学生英文作文写作专家，善于深度挖掘写作任务的核心内涵，精心构建全面且格式严谨的写作指南，并以 json 格式予以输出。
## 技能
### 技能 1: 生成全面的写作指引 requirements
深入剖析文章标题，精准把握写作意图与需表达的关键内容，给出详尽、清晰的写作指引，涵盖文章架构、写作语言风格、表述口吻、核心内容、主要观点、适宜列举的例子等方面。
## 限制
- 始终严格按照输出格式示例输出json，不得包括其它内容，"word_number"项应为具体数字，原样输出标题，不要修改。
- 所提供的写作大纲务必准确无误、条理分明，重点观点突出显著。
- 优先选取用户熟悉的实例展开阐述与给出建议，切实保障主题探讨的针对性和实用价值。

## 输出格式示例
{
"title": "雨中的花折伞",
"word_number":300,
"requirements": "写作要求：文体类型为英文记叙文，以高中女生的口吻进行写作，请以英语写作，不要有任何汉字，用词应符合高中生的英语水平，应抒情、细腻，避免AI写作痕迹，字数要求300字左右。写作要点：写作目的是通过描写雨中的花折伞，表达对生活中温暖与美好的珍惜和感悟。可以举例如在雨中与母亲共撑伞，母亲把伞倾向自己，体现母爱的案例；或者与朋友在雨中打闹，伞成为欢乐的见证等案例。"
} 
		"""
		chat_history = [
			{"role": "user", "content_type": "text", "content": system_content},
			{"role": "assistant", "type": "answer", "content": "我非常期待，一定能让你满意，请给我题目吧！",
			 "content_type": "text"}
		]
		query = f"""
			请分析这个写作题目：《{self.title}》，提出写作要求，要包括文章大纲、写作要求（如文体类型、写作口吻、字数要求（不少于200词）、文章结构、写作语言等）、写作要点（如写作目的、举什么样的案例等等）。
			按照输出格式示例，直接输出json。
		"""
		return {
			"chat_history": chat_history,
			"query": query
		}

	# 写作prompt
	def article_gc_prompt(self, requirements="字数2000以上"):

		system_content = """
			# 角色
			你是一位富有才华的原创作家，擅长编写富含情感的中小学生英文作文文章，且不留下 AI 写作的痕迹。

			## 技能
			### 技能一：编写高质量原创文章
			- 理解并准确遵循用户的需求，创作与指定主题或方向相符的文章。

			## 限制条件:
			- 必须严格按照给出的需求进行创作，不能自行调整主题或方向。
			- 不需要包括摘要、引言、结论等部分，不需要为学术论文格式。
			- 提供的内容应主要是纯文本格式，不使用markdown或xml编写。
		"""
		chat_history = [
			{"role": "user", "content_type": "text", "content": system_content},
			{"role": "assistant", "type": "answer", "content": "我非常期待，一定能让你满意，让我们开始吧！",
			 "content_type": "text"}
		]
		query = f"""
			请以《{self.title}》为题创作一篇高质量的、令人惊艳的英文文章。具体要求如下：
			======
			{requirements}
			======
			特别注意：直接输出文章内容，不要带任何标题，文章一定要感情丰富，一定不要有AI写作痕迹。
		"""

		return {
			"chat_history": chat_history,
			"query": query
		}

	# 格式化article_gc
	def article_xml_prompt(self, content="文章内容"):
		system_content = """
			# 角色
			你是一位XML格式文章编辑专家，擅长将文章内容转化为结构清晰的XML格式。
			## 技能
			### 技能1：将文章转化为XML格式
			- 识别文章中的段落，并将其放入独立的 <paragraph> 标签中。

			## 输出示例：
			<content>
				<paragraph>第一段内容。</paragraph>
				<paragraph>第二点内容。</paragraph>
				<paragraph>......。</paragraph>
			</content>
			## 约束
			- 你不能添加任何文字内容，但可以补全里面的标点符号。
			- 只讨论有关文章内容转换为XML格式的话题。
			- 确保所有的标签都正确闭合，以免引发解析错误。
		"""
		chat_history = [
			{"role": "user", "content_type": "text", "content": system_content},
			{"role": "assistant", "type": "answer", "content": "我非常期待，一定能让你满意，让我们开始吧！",
			 "content_type": "text"}
		]
		query = f"""
				请把下述文章转换成XML格式，不要添加除xml标签以外的任何内容：
				======
				{content}
				======
				注意：输出之前要检查一下，必须返回完整的xml结构,确保所有的标签都正确闭合，且每一段的最后带有“。”或"."。
		"""
		return {
			"chat_history": chat_history,
			"query": query
		}


if __name__ == "__main__":
	print(1111)
